package model;

import java.util.List;

// 分页对象  JavaBean
public class PageModel<T> { // List<Object> list.add("123") list.add(123)  list.add(true)

    // 使用泛型  让运行期可能产生的异常提高到编译期进行校验  Department
    //分页对象： 当前页 起始页  结束页  每页的数据(List)---size(固定值)  分页页码数量 总的页码数  总的条目数
    private Integer currentPage;// 当前页
    private Integer startPage;// 起始页
    private Integer endPage;// 结束页
    private List<T> list;// 每页需要展示的数据 size = 3  departmentList  currentPage=1  准备一个空容器  (currentPage-1)*size  遍历添加 count++  count==3
    private final int pageNum = 6;// 分页页码数量  常量值
    private Integer totalPage;// 总的页码数  totalPage=  Math.ceil(totalCount/size)   size = 3
    private Integer totalCount;// 总的条目数  size

    // 根据当前页计算起始页和结束页
    private void calcStartAndEnd() {   //  1 2 3 4 5 6 7 8 9 10 11 12 13 14
        // 假设  你总共有7页 totalPage = 7     1 2 3 4 5   2 3 4 5 6    3 4 5 6 7
        // 根据当前页计算起始页和结束页
        /*
            假设当前页一直是中间页
            currentPage = 3
            startPage = 1
            endPage = 5
         */
        // totalPage = 7 5+2  6 + 2 > 7
        if (currentPage + (pageNum-1)/2 > totalPage) {  // 3 4 5 6   2 3 4 5 6
            endPage = totalPage;// 结束页就是总页码数
            startPage = endPage - (pageNum-1) < 1 ? 1 : endPage - (pageNum-1);
        } else {
            startPage = currentPage - (pageNum - 1) / 2 < 1 ? 1 : currentPage - (pageNum - 1) / 2;// 2 3 3 4
            // totalPage = 3
            endPage = startPage + (pageNum - 1) < totalPage ? startPage + (pageNum - 1) : totalPage;// 8
        }
    }

    // 空参构造方法
    public PageModel(){

    }
    // 全参构造方法

    public PageModel(Integer currentPage, List<T> list, Integer totalPage, Integer totalCount) {
        this.currentPage = currentPage;
        this.list = list;
        this.totalPage = totalPage;
        this.totalCount = totalCount;
        // 设置起始页和结束页
        calcStartAndEnd();
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public Integer getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Integer getStartPage() {
        return startPage;
    }

    public void setStartPage(Integer startPage) {
        this.startPage = startPage;
    }

    public Integer getEndPage() {
        return endPage;
    }

    public void setEndPage(Integer endPage) {
        this.endPage = endPage;
    }
}
